package base

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"sitego/app/infrastructure/enum/response"
	"sitego/app/infrastructure/validate"
	"time"
)

func VerifyParam(c *gin.Context, obj any) bool {
	// 解析 JSON 请求
	if err := c.ShouldBind(obj); err != nil {
		SetError(err.Error())
		return false
	}
	// 设置自动验证参数
	validate.SetData(obj)
	return true
}

func Validate(errs map[string][]string) bool {
	// 数据验证
	if len(errs) > 0 {
		SetResult(errs)
		return true
	}
	return false
}

// JsonFailed 请求参数错误
func JsonFailed(c *gin.Context) {
	jsonReturn(c, response.PARAM_ERR_MSG, nil, response.PARAM_ERR)
}

// JsonFormat 请求参数格式错误
func JsonFormat(c *gin.Context, data any) {
	jsonReturn(c, response.FORMAT_ERR_MSG, data, response.FORMAT_ERR)
}

// JsonSuccess 操作数据成功
func JsonSuccess(c *gin.Context, msg string) {
	jsonReturn(c, msg, nil, response.SUCCESS)
}

// JsonError 操作数据失败
func JsonError(c *gin.Context, msg string) {
	jsonReturn(c, msg, nil, response.ERROR)
}

// JsonResult 获取数据成功；肯定有数据返回对象数组形式
func JsonResult(c *gin.Context, data any, msg string) {
	jsonReturn(c, msg, data, response.SUCCESS)
}

// JsonEmpty 没有更多数据
func JsonEmpty(c *gin.Context, msg string) {
	jsonReturn(c, msg, nil, response.SUCCESS)
}

// JsonTokenFailed TOKEN失效
func JsonTokenFailed(c *gin.Context, msg string) {
	jsonReturn(c, msg, nil, response.UNAUTH)
}

func jsonReturn(c *gin.Context, msg string, data any, code int16) {
	//  检查数据库并返回响应
	c.JSON(http.StatusOK, gin.H{
		"code": code,
		"msg":  msg,
		"time": time.Now().Unix(),
		"data": data,
	})
}
